﻿/*
 * Created by SharpDevelop.
 * User: CeCi
 * Date: 27/03/2014
 * Time: 07:17 p.m.
 * 
 * To change this template use Tools | Options | Coding | Edit Standard Headers.
 */
using System;
using System.Data;
using System.Data.OleDb;
using Gestión_UTN.Entities;

namespace Gestión_UTN.daimpl
{
    /// <summary>
    /// Description of alumnodaimpl.
    /// </summary>
    public class alumnodaimpl : Gestión_UTN.da.alumnosda
    {
        public alumnodaimpl()
        {
        }

        public bool SaveAlumno(int dni, string nombre, string apellido, DateTime fechaNac, string direccion, int ciud_codPostal, string legajo, string tel_principal, string tel_auxiliar, string mail_principal, string mail_auxiliar)
        {
            bool ingresado = false;

            OleDbConnection conex = null;
            OleDbTransaction trans = null;

            try
            {
                conex = util.Conexion.conectarAccess();
                trans = null;

                if (null != conex)
                {

                    string sql = "INSERT INTO alu_alumnos(alu_dni, alu_nombre, alu_apellido, alu_fechaNac, alu_direccion, ciu_codPostal, alu_legajo, alu_tel_principal, alu_tel_auxiliar, alu_mail_principal, alu_mail_auxiliar, alu_activo)" +
                                "VALUES(@alu_dni, @alu_nombre, @alu_apellido, @alu_fechaNac, @alu_direccion, @ciu_codPostal, @alu_legajo,  @alu_tel_principal, @alu_tel_auxiliar, @alu_mail_principal, @alu_mail_auxiliar, true)";



                    conex.Open();
                    trans = conex.BeginTransaction();

                    OleDbCommand insertar = new OleDbCommand(sql, conex, trans);

                    insertar.Parameters.AddWithValue("@alu_dni", dni);
                    insertar.Parameters.AddWithValue("@alu_nombre", nombre);
                    insertar.Parameters.AddWithValue("@alu_apellido", apellido);
                    insertar.Parameters.AddWithValue("@alu_fechaNac", fechaNac);
                    insertar.Parameters.AddWithValue("@alu_direccion", direccion);
                    insertar.Parameters.AddWithValue("@ciu_codPostal", ciud_codPostal);
                    insertar.Parameters.AddWithValue("@alu_legajo", legajo);
                    insertar.Parameters.AddWithValue("@alu_tel_principal", tel_principal);
                    insertar.Parameters.AddWithValue("@alu_tel_auxiliar", tel_auxiliar);
                    insertar.Parameters.AddWithValue("@alu_mail_principal", mail_principal);
                    insertar.Parameters.AddWithValue("@alu_mail_auxiliar", mail_auxiliar);

                    insertar.ExecuteNonQuery();

                    trans.Commit();

                    ingresado = true;

                    conex.Close();
                }

            }
            catch (Exception ex)
            {
                ingresado = false;
                trans.Rollback();
                conex.Close();

                throw new exceptions.daexception(ex.Message);
            }

            return ingresado;
        }

        public bool DeleteAlumno(int dni)
        {
            bool eliminado = false;

            OleDbConnection conex = null;
            OleDbTransaction trans = null;

            try
            {
                conex = util.Conexion.conectarAccess();
                trans = null;

                if (null != conex)
                {

                    string sql = "UPDATE alu_alumnos SET alu_activo = false WHERE alu_dni = @alu_dni";

                    conex.Open();

                    trans = conex.BeginTransaction();

                    OleDbCommand eliminar = new OleDbCommand(sql, conex, trans);

                    eliminar.Parameters.AddWithValue("@alu_dni", dni);

                    eliminar.ExecuteNonQuery();

                    trans.Commit();

                    eliminado = true;

                    conex.Close();
                }

            }
            catch (Exception ex)
            {
                eliminado = false;
                trans.Rollback();
                conex.Close();

                throw new exceptions.daexception(ex.Message);
            }

            return eliminado;
        }

        public bool ModifyAlumno(int dni_anterior, int dni, string nombre, string apellido, DateTime fechaNac, string direccion, int ciud_codPostal, string legajo, string tel_principal, string tel_auxiliar, string mail_principal, string mail_auxiliar)
        {
            bool modificado = false;

            OleDbConnection conex = null;
            OleDbTransaction trans = null;

            try
            {
                conex = util.Conexion.conectarAccess();
                trans = null;

                if (null != conex)
                {

                    string sql = "UPDATE alu_alumnos SET alu_dni = @alu_dni, alu_nombre = @alu_nombre, alu_apellido = @alu_apellido , " +
                                    "alu_fechaNac = @alu_fechaNac, alu_direccion = @alu_direccion, ciu_codPostal = @ciu_codPostal," +
                                    "alu_legajo = @alu_legajo, alu_tel_principal = @alu_tel_principal, alu_tel_auxiliar = @alu_tel_auxiliar," +
                                    "alu_mail_principal = @alu_mail_principal, alu_mail_auxiliar = @alu_mail_auxiliar" +
                                    " WHERE alu_dni = @dni_anterior";

                    conex.Open();
                    trans = conex.BeginTransaction();

                    OleDbCommand modificar = new OleDbCommand(sql, conex, trans);

                    modificar.Parameters.AddWithValue("@alu_dni", dni);
                    modificar.Parameters.AddWithValue("@alu_nombre", nombre);
                    modificar.Parameters.AddWithValue("@alu_apellido", apellido);
                    modificar.Parameters.AddWithValue("@alu_fechaNac", fechaNac);
                    modificar.Parameters.AddWithValue("@alu_direccion", direccion);
                    modificar.Parameters.AddWithValue("@ciu_codPostal", ciud_codPostal);
                    modificar.Parameters.AddWithValue("@alu_legajo", legajo);
                    modificar.Parameters.AddWithValue("@alu_tel_principal", tel_principal);
                    modificar.Parameters.AddWithValue("@alu_tel_auxiliar", tel_auxiliar);
                    modificar.Parameters.AddWithValue("@alu_mail_principal", mail_principal);
                    modificar.Parameters.AddWithValue("@alu_mail_auxiliar", mail_auxiliar);
                    modificar.Parameters.AddWithValue("@dni_anterior", dni_anterior);

                    modificar.ExecuteNonQuery();

                    trans.Commit();

                    modificado = true;

                    conex.Close();
                }

            }
            catch (Exception ex)
            {
                modificado = false;
                trans.Rollback();
                conex.Close();

                throw new exceptions.daexception(ex.Message);
            }

            return modificado;
        }

        public System.Data.DataTable FindAllAlumnos()
        {
            DataTable tablaAlumnos = null;

            OleDbConnection conex = null;

            try
            {
                conex = util.Conexion.conectarAccess();
                tablaAlumnos = new DataTable();

                if (null != conex)
                {

                    string sql = "SELECT alu_dni, alu_nombre,alu_apellido,alu_fechaNac,alu_direccion," +
                                    " ciu_nombre,alu_legajo, alu_tel_principal, alu_tel_auxiliar," +
                                    " alu_mail_principal, alu_mail_auxiliar FROM alu_alumnos alu,ciu_ciudades ciu " +
                                    "WHERE alu.ciu_codPostal = ciu.ciu_codPostal AND alu_activo = true";

                    OleDbDataAdapter adaptador = new OleDbDataAdapter(sql, conex);

                    conex.Open();

                    adaptador.Fill(tablaAlumnos);

                    conex.Close();
                }

            }
            catch (Exception ex)
            {
                tablaAlumnos = null;
                conex.Close();

                throw new exceptions.daexception(ex.Message);
            }

            return tablaAlumnos;
        }

        public Gestión_UTN.Entities.Alumno FindAlumnoByDNI(int dni)
        {
            Alumno alumno = null;

            OleDbConnection conex = null;

            try
            {
                conex = util.Conexion.conectarAccess();

                if (null != conex)
                {

                    string sql = "SELECT alu_dni, alu_nombre,alu_apellido,alu_fechaNac,alu_direccion," +
                                    "ciu_codPostal,alu_legajo, alu_tel_principal, alu_tel_auxiliar, " +
                                    " alu_mail_principal, alu_mail_auxiliar FROM alu_alumnos " +
                                    "WHERE alu_dni = @alu_dni AND alu_activo = true";

                    conex.Open();

                    OleDbCommand consulta = new OleDbCommand(sql, conex);

                    consulta.Parameters.AddWithValue("@alu_dni", dni);

                    OleDbDataReader lector = consulta.ExecuteReader();

                    while (lector.Read())
                    {
                        string nombre = lector[1].ToString();
                        string apellido = lector[2].ToString();
                        DateTime fechaNac = Convert.ToDateTime(lector[3].ToString());
                        string direccion = lector[4].ToString();
                        int codPostal = Convert.ToInt32(lector[5].ToString());
                        string legajo = lector[6].ToString();
                        string tel_principal = lector[7].ToString();
                        string tel_auxiliar = lector[8].ToString();
                        string mail_principal = lector[9].ToString();
                        string mail_auxiliar = lector[10].ToString();

                        alumno = new Alumno(dni, nombre,
                            apellido, fechaNac,
                            direccion, codPostal, legajo,
                            tel_principal, tel_auxiliar, mail_principal, mail_auxiliar);

                    }

                    conex.Close();
                }

            }
            catch (Exception ex)
            {
                alumno = null;
                conex.Close();

                throw new exceptions.daexception(ex.Message);
            }

            return alumno;
        }

        public Gestión_UTN.Entities.Alumno FindAlumnoByLegajo(string legajo)
        {
            Alumno alumno = null;

            OleDbConnection conex = null;

            try
            {
                conex = util.Conexion.conectarAccess();

                if (null != conex)
                {

                    string sql = "SELECT alu_dni, alu_nombre,alu_apellido,alu_fechaNac,alu_direccion," +
                                    "ciu_codPostal,alu_legajo, alu_tel_principal, alu_tel_auxiliar, " +
                                    "alu_mail_principal, alu_mail_auxiliar FROM alu_alumnos " +
                                    "WHERE alu_legajo = @alu_legajo AND alu_activo = true";



                    conex.Open();

                    OleDbCommand consulta = new OleDbCommand(sql, conex);

                    consulta.Parameters.AddWithValue("@alu_legajo", legajo);

                    OleDbDataReader lector = consulta.ExecuteReader();

                    while (lector.Read())
                    {
                        int doc = Convert.ToInt32(lector[0].ToString());
                        string nombre = lector[1].ToString();
                        string apellido = lector[2].ToString();
                        DateTime fechaNac = Convert.ToDateTime(lector[3].ToString());
                        string direccion = lector[4].ToString();
                        int codPostal = Convert.ToInt32(lector[5].ToString());
                        string tel_principal = lector[7].ToString();
                        string tel_auxiliar = lector[8].ToString();
                        string mail_principal = lector[9].ToString();
                        string mail_auxiliar = lector[10].ToString();

                        alumno = new Alumno(doc, nombre,
                            apellido, fechaNac,
                            direccion, codPostal, legajo,
                            tel_principal, tel_auxiliar, mail_principal, mail_auxiliar);
                    }

                    conex.Close();
                }

            }
            catch (Exception ex)
            {
                alumno = null;
                conex.Close();

                throw new exceptions.daexception(ex.Message);
            }

            return alumno;
        }
    }
}
